package com.demo.java.OD101_150.OD133;

import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【水仙花数 2】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145726015
 */
public class OdMain {
    // 存储合法的分割结果
    public static LinkedList<Integer> resultLinklist = new LinkedList<>();

    // 判断一个数字是否为水仙花数
    public static boolean isWaterNum(int num) {
        int a = num % 10;
        int b = num / 10 % 10;
        int c = num / 100;
        return a * a * a + b * b * b + c * c * c == num;
    }

    // 计算字符串中字符的ASCII和
    public static int getStringAsciiSum(String s) {
        int result = 0;
        for (char c : s.toCharArray()) {
            result += c;
        }
        return result;
    }

    // 递归查找可能的有效分割
    public static void findData(String values, int number) {
        String subStrOne;
        String subStrTwo;
        // 从第一个字符开始分割
        for (int j = 1; j < values.length(); ++j) {
            subStrOne = values.substring(0, j);
            subStrTwo = values.substring(j);

            // 检查第一个子字符串是否为水仙花数
            if (isWaterNum(getStringAsciiSum(subStrOne))) {
                // 如果第一个子字符串为水仙花数，继续检查第二个子字符串
                if (isWaterNum(getStringAsciiSum(subStrTwo))) {
                    resultLinklist.add(number);
                } else {
                    findData(subStrTwo, number + 1);
                }
            }
        }
    }

    public static void main(String[] args) {
        try {
            // 读取输入
            int count = 2;
            Scanner scan = new Scanner(System.in);
            String value = scan.nextLine();

            // 输入合法性检查
            if (value == null || value.length() == 0) {
                System.out.println("input error");
                return;
            }

            // 递归查找有效分割
            findData(value, count);

            // 结果判断：如果有多个有效分割，则返回 -1；否则返回唯一的结果
            int result = 0;
            if (resultLinklist.size() > 1) {
                result = -1;
            } else if (resultLinklist.size() == 1) {
                result = resultLinklist.get(0);
            }

            // 输出最终结果
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}